package com.xiaoq.order.thirdpayinfo.tencent;

import com.xiaoq.order.thirdpayinfo.tencent.common.*;
import com.xiaoq.order.thirdpayinfo.tencent.protocol.unifiedorder_protocol.UnifiedOrderReqData;
import com.xiaoq.order.thirdpayinfo.tencent.service.UnifiedOrderService;
import org.apache.commons.lang3.StringUtils;

import java.util.Map;

public class Main {

	public static void main(String[] args) {

		try {
			UnifiedOrderReqData order = new UnifiedOrderReqData();
			order.setAppid(Configure.getAppid());
			order.setMch_id(Configure.getMchid());
			order.setNonce_str(RandomStringGenerator
					.getRandomStringByLength(30));

			order.setBody("test");
			order.setOut_trade_no("12345563");
			order.setTotal_fee(1);
			order.setSpbill_create_ip("8.8.8.8");
			order.setNotify_url("www.baidu.com");
			order.setTrade_type("NATIVE");
			order.setProduct_id("12344567");
			order.setSign(Signature.getSign(order.toMap()));

			UnifiedOrderService service = new UnifiedOrderService();
			String result = service.request(order);
			System.out.println(result);
			Map<String, Object> map = XMLParser.getMapFromXML(result);
			String returnCode = (String) map.get("return_code");
			if (!StringUtils.isEmpty(returnCode)
					&& StringUtils.equals(returnCode, "SUCCESS")) {
				String url = (String) map.get("code_url");
				if (!StringUtils.isEmpty(url)) {
					System.out
							.println("*****************************************"
									+ url);
				}
			}

			// --------------------------------------------------------------------
			// 温馨提示，第一次使用该SDK时请到com.tencent.common.Configure类里面进行配置
			// --------------------------------------------------------------------

			// --------------------------------------------------------------------
			// PART One:基础组件测试
			// --------------------------------------------------------------------

			// 1）https请求可用性测试
			// HTTPSPostRquestWithCert.test();

			// 2）测试项目用到的XStream组件，本项目利用这个组件将Java对象转换成XML数据Post给API
			// XStreamTest.test();

			// --------------------------------------------------------------------
			// PART Two:基础服务测试
			// --------------------------------------------------------------------

			// 1）测试被扫支付API
			// PayServiceTest.test();

			// 2）测试被扫订单查询API
			// PayQueryServiceTest.test();

			// 3）测试撤销API
			// 温馨提示，测试支付API成功扣到钱之后，可以通过调用PayQueryServiceTest.test()，将支付成功返回的transaction_id和out_trade_no数据贴进去，完成撤销工作，把钱退回来
			// ^_^v
			// ReverseServiceTest.test();

			// 4）测试退款申请API
			// RefundServiceTest.test();

			// 5）测试退款查询API
			// RefundQueryServiceTest.test();

			// 6）测试对账单API
			// DownloadBillServiceTest.test();

			// 本地通过xml进行API数据模拟的时候，先按需手动修改xml各个节点的值，然后通过以下方法对这个新的xml数据进行签名得到一串合法的签名，最后把这串签名放到这个xml里面的sign字段里，这样进行模拟的时候就可以通过签名验证了
			// Util.log(Signature.getSignFromResponseString(Util.getLocalXMLString("/test/com/tencent/business/refundqueryserviceresponsedata/refundquerysuccess2.xml")));

			// Util.log(new Date().getTime());
			// Util.log(System.currentTimeMillis());

		} catch (Exception e) {
			Util.log(e.getMessage());
		}

	}
}
